package com.gopay.common.core.dic.dao.impl;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.stereotype.Repository;

import com.gopay.common.base.dao.impl.BaseDAOImpl;
import com.gopay.common.core.dic.dao.CpsTransInfoQueryDAO;
import com.gopay.common.domain.cps.CpsTransInfo;

/**
 * 核心处理中心 交易信息表
 * 
 * @CpsTransInfoQueryDAOImpl.java
 * @author MA HUAN
 * @2013-1-15 下午2:21:14 www.gopay.com.cn Inc.All rights reserved.
 */

@Repository(value="cpsTransInfoQueryDAO")
public class CpsTransInfoQueryDAOImpl extends BaseDAOImpl<CpsTransInfo, Serializable> implements CpsTransInfoQueryDAO {

    @Override
    public List<CpsTransInfo> findByMap(Map<Object, Object> paraMap) {
        Set<Object> set = paraMap.keySet();
        Map<String, Object> param = new HashMap<String, Object>();
        for(Object key : set){
            if(key != null){
                param.put(key.toString(), paraMap.get(key));
            }
        }
        return findByHql(formatHql(param), param);
    }
    
    /**
     * 
     * @param param
     * @return
     */
    @SuppressWarnings("rawtypes")
    private String formatHql(Map param) {
        StringBuilder hql = new StringBuilder(" from CpsTransInfo where ");
        Iterator iterator = param.keySet().iterator();
        while (iterator.hasNext()) {
            String column = (String) iterator.next();
            hql.append(column);
            hql.append(" =:").append(column);
            hql.append(" and ");
        }
        // 正则表达式说明：\\b单词边界。\\S 空格。 *多个。 $ 从后面匹配。
        // "\\band\\b\\s*$"含义，从后面替换 多个空格，加and单词的字符串，即【 and 】或 【 and】或【 and 】
        // "\\bwhere\\b\\s*$"含义，从后面替换 多个空格，加where单词的字符串，即【 where 】或 【 where】或【
        // where 】
        String strHql = hql.toString().replaceAll("\\band\\b\\s*$", "").replaceAll("\\bwhere\\b\\s*$", "");
        return strHql;
    }
}
